# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/brcm,bcmgenet.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Broadcom BCM7xxx Ethernet Controller (GENET)

maintainers:
  - Doug Berger <opendmb@gmail.com>
  - Florian Fainelli <f.fainelli@gmail.com>

properties:
  compatible:
    enum:
      - brcm,genet-v1
      - brcm,genet-v2
      - brcm,genet-v3
      - brcm,genet-v4
      - brcm,genet-v5
      - brcm,bcm2711-genet-v5
      - brcm,bcm7712-genet-v5

  reg:
    maxItems: 1

  interrupts:
    minItems: 2
    items:
      - description: general purpose interrupt line
      - description: RX and TX rings interrupt line
      - description: Wake-on-LAN interrupt line


  clocks:
    minItems: 1
    items:
      - description: main clock
      - description: EEE clock
      - description: Wake-on-LAN clock

  clock-names:
    minItems: 1
    items:
      - const: enet
      - const: enet-eee
      - const: enet-wol

  "#address-cells":
    const: 1

  "#size-cells":
    const: 1

patternProperties:
  "^mdio@[0-9a-f]+$":
    type: object
    $ref: "brcm,unimac-mdio.yaml"

    description:
      GENET internal UniMAC MDIO bus

required:
  - reg
  - interrupts
  - phy-mode
  - "#address-cells"
  - "#size-cells"

allOf:
  - $ref: ethernet-controller.yaml

unevaluatedProperties: false

examples:
  #include <dt-bindings/interrupt-controller/arm-gic.h>

  - |
    ethernet@f0b60000 {
        phy-mode = "internal";
        phy-handle = <&phy1>;
        mac-address = [ 00 10 18 36 23 1a ];
        compatible = "brcm,genet-v4";
        reg = <0xf0b60000 0xfc4c>;
        interrupts = <0x0 0x14 0x0>, <0x0 0x15 0x0>;
        #address-cells = <1>;
        #size-cells = <1>;

        mdio0: mdio@e14 {
           compatible = "brcm,genet-mdio-v4";
           #address-cells = <1>;
           #size-cells = <0>;
           reg = <0xe14 0x8>;

           phy1: ethernet-phy@1 {
                max-speed = <1000>;
                reg = <1>;
                compatible = "ethernet-phy-ieee802.3-c22";
           };
        };
    };

  - |
    ethernet@f0b80000 {
        phy-mode = "moca";
        fixed-link = <1 0 1000 0 0>;
        mac-address = [ 00 10 18 36 24 1a ];
        compatible = "brcm,genet-v4";
        #address-cells = <1>;
        #size-cells = <1>;
        reg = <0xf0b80000 0xfc4c>;
        interrupts = <0x0 0x16 0x0>, <0x0 0x17 0x0>;

        mdio1: mdio@e14 {
           compatible = "brcm,genet-mdio-v4";
           #address-cells = <1>;
           #size-cells = <0>;
           reg = <0xe14 0x8>;
        };
    };

  - |
    ethernet@f0ba0000 {
        phy-mode = "rgmii";
        phy-handle = <&phy0>;
        mac-address = [ 00 10 18 36 26 1a ];
        compatible = "brcm,genet-v4";
        #address-cells = <1>;
        #size-cells = <1>;
        reg = <0xf0ba0000 0xfc4c>;
        interrupts = <0x0 0x18 0x0>, <0x0 0x19 0x0>;

        mdio2: mdio@e14 {
           compatible = "brcm,genet-mdio-v4";
           #address-cells = <1>;
           #size-cells = <0>;
           reg = <0xe14 0x8>;

           phy0: ethernet-phy@0 {
                max-speed = <1000>;
                reg = <0>;
                compatible = "ethernet-phy-ieee802.3-c22";
           };
        };
    };
